# -*- coding: UTF-8 -*-
"""
@Project :xlx-fastapi
@File    :redis_dao.py
@Author  :xlx-ali
@Date    :2024/06/24 09:21 星期一
"""


from app.config import globalAppSettings
import redis

pool = redis.ConnectionPool(host=globalAppSettings.redis_host, port=globalAppSettings.redis_port, db=globalAppSettings.redis_db, password=globalAppSettings.redis_password, max_connections=10)
redis_client = redis.Redis(connection_pool=pool)


# 设置键值对
def set(key, value, ex=None, px=None):
    if ex:
        # 设置过期时间（秒）
        redis_client.setex(key, ex, value)
    elif px:
        # 设置过期时间（毫秒）
        redis_client.psetex(key, px, value)
    else:
        # 无过期时间
        redis_client.set(key, value)


# 设置键值对
def hset(name, key: str | None = None, value: str | None = None, mapping: dict| None = None, items: list| None = None):
    redis_client.hset(name=name, mapping=mapping)


# 获取键值对
def get(key):
    return redis_client.get(key)


def hget(name, key):
    return redis_client.hget(name, key)


def hgetall(name):
    return redis_client.hgetall(name)


def hincrby(name, key):
    return redis_client.hincrby(name, key)


def expireat(name, when, nx: bool = False, xx: bool = False, gt: bool = False, lt: bool = False):
    return redis_client.expireat(name, when, nx, xx, gt, lt)


# 删除键
def delete(key):
    return redis_client.delete(key)


# 检查键是否存在
def exists(key):
    return redis_client.exists(key)


# 设置键值对并指定生存时间（TTL）
def set_with_ttl(key, value, ttl):
    redis_client.setex(key, ttl, value)


# 获取键的剩余生存时间（TTL）
def ttl(key):
    return redis_client.ttl(key)


# 递增键的值（如果键不存在，则创建并初始化为0）
def incr(key, amount=1):
    return redis_client.incr(key, amount)


# 递减键的值（如果键不存在，则创建并初始化为0）
def decr(key, amount=1):
    return redis_client.decr(key, amount)
